home *** CD-ROM | disk | FTP | other *** search
/ Shareware Games Galore! / Shareware Games Galore!.iso / arcade / gameser5 / msquare.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1983-03-23  |  4.0 KB  |  93 lines

  1. 10     REM      MSQUARE            WRITTEN BY BILL WEIL    1983
  2. 20     REM THIS PROGRAM PRINTS AND DISPLAYS MAGIC SQUARES
  3. 30     REM
  4. 40     REM
  5. 50     REM
  6. 60     REM  PRINT EXPLANATION  **********************************************
  7. 70     REM
  8. 100    CLS
  9. 110    PRINT "             THIS PROGRAM PRINTS MAGIC SQUARES."
  10. 115    PRINT
  11. 120    PRINT "A MAGIC SQUARE IS AN ARRAY OF CONSECUTIVE NUMBERS WHERE ALL THE"
  12. 130    PRINT "ROWS, COLUMNS AND DIAGONALS ADD UP TO THE SAME NUMBER.  THE ALGORITHM"
  13. 140    PRINT "USED CAN CALCULATE MAGIC SQUARES OF ANY SIZE AS LONG AS THE NUMBERS OF"
  14. 150    PRINT "ROWS AND COLUMNS ARE AN ODD NUMBER."
  15. 153    REM
  16. 154    REM
  17. 155    REM  GOTO 910  'BYPASSES EXPLANATION ************************************
  18. 156    REM
  19. 157    PRINT
  20. 160    PRINT "THE LARGEST MAGIC SQUARE THAT CAN FIT ON AN 80 COLUMN SCREEN IS"
  21. 170    PRINT "19 BY 19. THE LARGEST SQUARE THAT CAN PRINT ON AN IBM OR EPSON MX-80"
  22. 180    PRINT "PRINTER IS 31 BY 31 IN COMPRESSED MODE (17.16 cpi). THE LARGEST SQUARE"
  23. 190    PRINT "THAT CAN PRINT ON AN EPSON MX-100 IN COMPRESSED MODE IS 45 BY 45."
  24. 200    PRINT
  25. 210    PRINT "THIS PROGRAM PRINTS A DOUBLE WIDTH HEADING LINE BY SPECIFYING A"
  26. 220    PRINT "CHR$(14) AND PRINTS THE MAGIC SQUARE ITSELF IN COMPRESSED MODE"
  27. 230    PRINT "BY SPECIFYING A CHR$(15).  THE PROGRAM ALSO ASSUMES A 132 POSITION"
  28. 240    PRINT "PRINT LINE. TO CUSTOMIZE THIS PROGRAM FOR YOUR PRINTER CHANGE THE"
  29. 250    PRINT "FOLLOWING LINES OF CODE: 910, 940-960, 10615-10630, 10900-10910"
  30. 260    PRINT
  31. 270    PRINT "TO BYPASS THESE INSTRUCTIONS REMOVE THE  REM  FROM LINE 155"
  32. 280    PRINT
  33. 860    REM
  34. 870    REM
  35. 880    REM
  36. 890    REM   START UP  *********************************************************
  37. 900    REM
  38. 910    WIDTH "LPT1:",132  'EPSON MX-80 PRINTS 132 COLUMNS IN COMPRESSED MODE
  39. 920    DEFINT C,O,R,S
  40. 930    PRINT
  41. 940    INPUT "ENTER AN ODD NUMBER FROM 3 T0 31: ",SIZE
  42. 960    IF SIZE < 3 OR SIZE > 31 THEN PRINT "NUMBER IS NOT WITHIN RANGE": GOTO 930
  43. 970    IF SIZE MOD 2 = 0 THEN PRINT "MUST BE AN ODD NUMBER": GOTO 930
  44. 980    DIM TABLE(SIZE,SIZE)
  45. 990    SIZESQ = SIZE^2   'THIS IS THE NUMBER OF CELLS IN THE ARRAY
  46. 1000   IF SIZE <= 31 THEN PICTURE$ = "####"                                                     ELSE PICTURE$ = "#####"   'THIS IS USED FOR WIDE PRINTERS
  47. 1010   PRINT: PRINT:
  48. 10000  REM
  49. 10010  REM
  50. 10020  REM
  51. 10030  REM   FILL ARRAY  *******************************************************
  52. 10040  REM
  53. 10100  COL = (SIZE +1)/2 -1    'SET POSITION SO THAT LINES 10280 AND 10300 CAUSE
  54. 10120  ROW = 2                'THE PROGRAM TO START AT THE MIDDLE OF THE TOP ROW
  55. 10200  FOR COUNT = 1 TO SIZESQ
  56. 10240      OLDCOL = COL:  OLDROW = ROW  'SAVE LAST ELEMENT POSITION
  57. 10280      COL = COL + 1  'FILL IN ARRAY BY MOVING UP TO THE RIGHT
  58. 10300      ROW = ROW - 1  'DIAGONALLY
  59. 10340      IF COL > SIZE THEN COL = 1      'WRAP FROM RIGHT TO LEFT
  60. 10360      IF ROW = 0    THEN ROW = SIZE   'WRAP FROM TOP TO BOTTOM
  61. 10400      IF TABLE(ROW,COL) <> 0 THEN COL = OLDCOL: ROW = OLDROW + 1
  62. 10410      REM IF CELL IS OCCUPIED THEN DROP DOWN ONE ROW FROM OLD POSITION
  63. 10450      TABLE(ROW,COL) = COUNT
  64. 10500      IF COUNT MOD 100 = 0 OR COUNT = SIZESQ THEN                                         LOCATE 23,10: PRINT "WORKING ON NUMBER "; COUNT; " OF "; SIZESQ
  65. 10540  NEXT COUNT
  66. 10560  REM
  67. 10570  REM
  68. 10580  REM
  69. 10590  REM   PRINT ARRAY  ****************************************************
  70. 10600  REM
  71. 10610  IF SIZE <= 19                                                                     THEN CLS: PRINT "A "; SIZE; " BY "; SIZE; " MAGIC SQUARE": PRINT
  72. 10615  LPRINT CHR$(12)  'GO TO TOP OF FORM
  73. 10620   LPRINT CHR$(14) "A" SIZE "BY" SIZE "MAGIC SQUARE"
  74. 10630   LPRINT CHR$(15)  'SET TO COMPRESSED PRINT MODE
  75. 10640  FOR ROW = 1 TO SIZE
  76. 10680      FOR COL = 1 TO SIZE
  77. 10720          LPRINT USING PICTURE$; TABLE(ROW,COL);
  78. 10730            IF SIZE <= 19 THEN PRINT USING PICTURE$; TABLE(ROW,COL);
  79. 10760      NEXT COL
  80. 10800      LPRINT
  81. 10820      IF SIZE <= 19 THEN PRINT
  82. 10840   NEXT ROW
  83. 10860  REM
  84. 10870  REM
  85. 10880  REM
  86. 10890  REM   FINISH UP *******************************************************
  87. 10895  REM
  88. 10900  LPRINT  CHR$(18)  'RESTORE TO NORMAL PRINT
  89. 10910  WIDTH "LPT1:",80  'RESTORE TO 80 COLUMN WIDTH
  90. 10940  LPRINT "THE SUM OF EACH ROW, COLUMN AND DIAGONAL IS" SIZE*(SIZESQ+1)/2
  91. 10950  IF SIZE <= 19 THEN PRINT:                                                         PRINT "THE SUM OF EACH ROW, COLUMN AND DIAGONAL IS" SIZE*(SIZESQ+1)/2
  92. 10999  END
  93.